From: Jonas Ã…dahl Date: Tue, 21 Apr 2020 16:06:06 +0000 (+0200) Subject: status/remote-access: Visualize recordings as screen recording X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~684^2^2~83 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=20dcc8aa874f4503a52bbc4f3c96a26059b984b0;p=gnome-shell.git status/remote-access: Visualize recordings as screen recording If a remote access is marked as a recording, visualize it the same way as a built in recording. Also don't stop it if there is an actual screen sharing going on, so that one can use a plain "recording" while still disabling what is an actual screen sharing. https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1372 --- diff --git a/js/ui/status/remoteAccess.js b/js/ui/status/remoteAccess.js index 09b8fd8c9..feafe6155 100644 --- a/js/ui/status/remoteAccess.js +++ b/js/ui/status/remoteAccess.js @@ -24,7 +24,8 @@ class RemoteAccessApplet extends PanelMenu.SystemIndicator { return; this._handles = new Set(); - this._indicator = null; + this._sharedIndicator = null; + this._recordingIndicator = null; this._menuSection = null; controller.connect('new-handle', (o, handle) => { @@ -33,32 +34,49 @@ class RemoteAccessApplet extends PanelMenu.SystemIndicator { } _ensureControls() { - if (this._indicator) + if (this._sharedIndicator && this._recordingIndicator) return; - this._indicator = this._addIndicator(); - this._indicator.icon_name = 'screen-shared-symbolic'; - this._indicator.add_style_class_name('remote-access-indicator'); - this._item = + this._sharedIndicator = this._addIndicator(); + this._sharedIndicator.icon_name = 'screen-shared-symbolic'; + this._sharedIndicator.add_style_class_name('remote-access-indicator'); + + this._sharedItem = new PopupMenu.PopupSubMenuMenuItem(_("Screen is Being Shared"), true); - this._item.menu.addAction(_("Turn off"), - () => { - for (let handle of this._handles) - handle.stop(); - }); - this._item.icon.icon_name = 'screen-shared-symbolic'; - this.menu.addMenuItem(this._item); + this._sharedItem.menu.addAction(_("Turn off"), + () => { + for (let handle of this._handles) { + if (!handle.is_recording) + handle.stop(); + } + }); + this._sharedItem.icon.icon_name = 'screen-shared-symbolic'; + this.menu.addMenuItem(this._sharedItem); + + this._recordingIndicator = this._addIndicator(); + this._recordingIndicator.icon_name = 'media-record-symbolic'; + this._recordingIndicator.add_style_class_name('screencast-indicator'); + } + + _isScreenShared() { + return [...this._handles].some(handle => !handle.is_recording); + } + + _isRecording() { + return [...this._handles].some(handle => handle.is_recording); } _sync() { - if (this._handles.size == 0) { - this._indicator.visible = false; - this._item.visible = false; + if (this._isScreenShared()) { + this._sharedIndicator.visible = true; + this._sharedItem.visible = true; } else { - this._indicator.visible = true; - this._item.visible = true; + this._sharedIndicator.visible = false; + this._sharedItem.visible = false; } + + this._recordingIndicator.visible = this._isRecording(); } _onStopped(handle) { @@ -70,9 +88,7 @@ class RemoteAccessApplet extends PanelMenu.SystemIndicator { this._handles.add(handle); handle.connect('stopped', this._onStopped.bind(this)); - if (this._handles.size == 1) { - this._ensureControls(); - this._sync(); - } + this._ensureControls(); + this._sync(); } });